home *** CD-ROM | disk | FTP | other *** search
- ; FILE: Source:modules/RebootFix.ASM REV: 9 --- Fix problem with multisync reboot
-
- ;
- ; RebootFix module for BlizKick
- ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ;
- ; V1.3 - 5th Aug 2000
- ; Fucked up if the module patch was installed inside ROM. Fixed.
- ;
- ; V1.4 - 31st Jan 2001
- ; Added support for exec44 coldstart.
- ;
- ; Written by Harry Sintonen.
- ; This source code is Public Domain.
- ;
- ;
-
- incdir "include:"
- include "blizkickmodule.i"
-
-
- SECTION PATCH,CODE
- _DUMMY_LABEL
- BK_PTC
-
- ; Code is run with following incoming parameters:
- ;
- ; a0=ptr to ROM start (buffer) eg. $1DE087B8
- ; a1=ptr to ROM start (ROM) eg. $00F80000 (do *not* access!)
- ; d0=ROM lenght in bytes eg. $00080000
- ; a2=ptr to _FindResident routine (will search ROM buffer for resident tag):
- ; CALL: jsr (a2)
- ; IN: a0=ptr to ROM, d0=rom len, a1=ptr to resident name
- ; OUT: d0=ptr to resident (buf) or NULL
- ; a3=ptr to _InstallModule routine (can be used to plant a "module"):
- ; CALL: jsr (a3)
- ; IN: a0=ptr to ROM, d0=rom len, a1=ptr to module, d6=dosbase
- ; OUT: d0=success
- ; a4=ptr to _Printf routine (will dump some silly things (errormsg?) to stdout ;-)
- ; CALL: jsr (a4)
- ; IN: a0=FmtString, a1=Array (may be 0), d6=dosbase
- ; OUT: -
- ; d6=dosbase, a6=execbase
- ;
- ; Code should return:
- ;
- ; d0=true if succeeded, false if failed.
- ; d1-d7/a0-a6 can be trashed. a7 *must* be preserved! ;-)
-
- cmp.w #37,($C,a0) ;requires V37+ rom image
- bhs.b .cont
- moveq #0,d0
- rts
-
- .cont moveq #0,d7
-
- move.l a0,a5
- move.l #$397C0200,d1 ;$0100 move.w #$200,($0100,a4)
- move.l #$317C0200,d2 ;$0064 move.w #$200,($0064,a0)
- move.w #512-1,d3
- .findl subq.w #1,d3
- beq.b .badrom
- addq.l #2,a5
- cmp.l (a5),d1
- bne.b .not1
- cmp.w #$0100,(4,a5)
- beq.b .found
- .not1
- cmp.l (a5),d2
- bne.b .findl
- cmp.w #$0064,(4,a5)
- bne.b .findl
-
- .found
- move.w #$4EB9,(a5)+ ;create jsr
-
- ; a0 = ptr to ROM
- ; d0 = rom len
- ; d6 = dosbase
- move.l d0,d5
- lea (_rebootfix_module,pc),a1
- jsr (a3) ;call _InstallModule
- move.l d0,d1
- move.l d5,d0
- tst.l d1
- beq.b .nomod
-
- lea (_name,pc),a1
- jsr (a2) ;call _FindResident
- tst.l d0
- beq.b .nomod
-
- move.l d0,a0
- moveq #_earlycode-_init,d0
- add.l (RT_INIT,a0),d0
- move.l d0,(a5) ; jsr destination
-
-
- moveq #1,d7
- .nomod
- .badrom
- move.l d7,d0
- rts
-
- CNOP 0,4
- _rebootfix_module
- BK_MOD BKMF_SingleMode,_end,(0)<<24+37<<16+NT_UNKNOWN<<8+(256-128),_name,_idstr,_init
-
- ; Singlemode on,
- ; NEVER INIT module, requires KS V37.x or better, module type NT_UNKNOWN, priority -128.
-
- _init rts
-
- _earlycode movem.l d0/a0,-(sp)
- lea $dff000+$100,a0
- move.w #$0200,(a0) ; Colour burst on!
- moveq #3,d0
- swap d0 ; some delay
- .loop move.w #$0020,($1DC-$100,a0) ; set PAL
- subq.l #1,d0
- bne.b .loop
- movem.l (sp)+,d0/a0
- rts
-
- _name
- _idstr dc.b 'RebootFix patch',0
- CNOP 0,2
- _end
-
- SECTION VERSION,DATA
-
- dc.b '$VER: RebootFix_PATCH 1.4 (31.1.01)',0
-
-